package 设计原则.开闭原则;

/**
 * 违反了开闭原则，在源代码中修改，对显示原价这一功能进行了修改。
 * 在开发时，对于需求的变化，在要求遵守开闭原则的前提下，我们应该在开发中去进行扩展，而不是修改源代码。
 * 正例：
 * 另一种思路 源码不改动,直接只改动入参,直接将折后价格传入到setProd_price中
 * @author lxiaol
 * @date 2021年06月23日 18:50
 */
public class postive {
    public static void main(String[] args) {
        //输入商品信息，向上转型调用重写方法设置价格
        Pen2 redPen = new discountPen();
        redPen.setProd_name("英雄牌钢笔");
        redPen.setProd_origin("厂里");
        redPen.setProd_price(20d);
        //输出商品信息
        System.out.println(redPen);
    }
}

class Pen2 {
    private String prod_name;
    private String prod_origin;
    private double prod_price;

    public String getProd_name() {
        return prod_name;
    }

    public void setProd_name(String prod_name) {
        this.prod_name = prod_name;
    }

    public String getProd_origin() {
        return prod_origin;
    }

    public void setProd_origin(String prod_origin) {
        this.prod_origin = prod_origin;
    }

    public double getProd_price() {
        return prod_price;
    }

    public void setProd_price(double prod_price) {
        this.prod_price = prod_price;
    }

    @Override
    public String toString() {
        return "Pen{" +
                "prod_name='" + prod_name + '\'' +
                ", prod_origin='" + prod_origin + '\'' +
                ", prod_price=" + prod_price +
                '}';
    }
}

class discountPen extends Pen2 {
    //用重写方法设置价格
    @Override
    public void setProd_price(double prod_price) {
        super.setProd_price(prod_price * 0.8d);
    }
}

